<?php

/**
 * lot actions.
 *
 * @package    appcemhti
 * @subpackage lot
 * @author     Steve Cancès
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class lotActions extends sfActions
{
    
    protected function droitLecture()
    {
        $droitUtilisateur = $this->lot->idDroitSurLot($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($droitUtilisateur == 3 || $droitUtilisateur == 2, 'sfGuardAuth', 'secure');
    }
    
    protected function droitEcriture()
    {
        $droitUtilisateur = $this->lot->idDroitSurLot($this->getUser()->getGuardUser()->getId());
        $this->forwardUnless($droitUtilisateur == 3, 'sfGuardAuth', 'secure');
    }
  
    public function executeShow(sfWebRequest $request)
    {
        // On vérifie que l'identifiant du lot passé en paramètre existe bien
        $this->forward404Unless(
                $this->lot = Doctrine_Core::getTable('lot')->find(
                        array($request->getParameter('id_lot'))),
                sprintf(
                        'Object lot does not exist (%s).',
                        $request->getParameter('id_lot')
                )
        );
        
        // On vérifie que l'utilisateur a les droits de lecture
        // sur le lot concerné
        $this->droitLecture();
        
        // On stocke dans les attributs de la classes
        // les informations nécessaires à la vue 
        $this->nbCommentaireSurLot = $this->lot->getCommentaire()->count();
        $this->nbEchantillon = $this->lot->getEchantillon()->count();
        $this->nbTraitementSurLot = $this->lot->getTraitement()->count();
        $this->typesTraitement = Doctrine_Core::getTable('typeTraitement')->findAll();
    }
    
    // Affiche la page permettant d'ordonner les traitements subis par le lot
    public function executeOrdre(sfWebRequest $request)
    {
        $this->forward404Unless($this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot')));
        
        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();
        
        $this->traitements = Doctrine_Core::getTable('traitement')->getTraitementLotDatatable($this->lot->getIdLot(), null, 1, "ASC")->fetchArray();
    }

    public function executeNew(sfWebRequest $request)
    {
        //Création de l'objet lotForm
        $this->form = new lotForm();
    }

    public function executeCreate(sfWebRequest $request)
    {
        //Vérification que la méthode de la requête est bien POST 
        //(Validation du formulaire)
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        //Création de l'objet lotForm
        $this->form = new lotForm();

        //Récupération des paramètres de la requête
        $params = $request->getParameter($this->form->getName());
        $params['created_at'] = date('Y-m-d H:i:s', time());
        $params['updated_at'] = date('Y-m-d H:i:s', time());
        $params['id_user'] = $this->getUser()->getGuardUser()->getId();
        //On enregistre les modifications apportées
        //aux paramètres de la requête
        $request->setParameter($this->form->getName(), $params);

        //Vérification du formulaire et sauvegarde le cas échéant
        $this->processForm($request, $this->form);

        //Si formulaire invalide on retourne sur le template new
        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request)
    {
        $this->forward404Unless($this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot')));

        // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
        $this->droitEcriture();

        $this->form = new lotForm($this->lot);
    }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot')));
    
    // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
    $this->droitEcriture();
    
    $this->form = new lotForm($this->lot);
    
    $params = $request->getParameter($this->form->getName());
    $params['created_at'] = $this->lot->getCreatedAt();
    $params['updated_at'] = date('Y-m-d H:i:s', time());
    $params['id_user'] = $this->lot->getIdUser();
    $request->setParameter($this->form->getName(), $params);

    $this->processForm($request, $this->form);

    $this->setTemplate('edit');
  }

//  public function executeDelete(sfWebRequest $request)
//  {
//    $request->checkCSRFProtection();
//
//    $this->forward404Unless($lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot_echantillion'))), sprintf('Object lot does not exist (%s).', $request->getParameter('id_lot_echantillion')));
//    $lot->delete();
//
//    $this->redirect('lot/index');
//  }
  

    protected function processForm(sfWebRequest $request, sfForm $form)
    {
        //Le formulaire est "complété" avec les paramètres de la requête
        $form->bind(
                $request->getParameter($form->getName()),
                $request->getFiles($form->getName())
        );
        //Si le formulaire est valide
        if ($form->isValid())
        {
            //On le sauvegarde
            $lot = $form->save();
            //Méthode du modèle permettant de mettre à jour
            //les droits des utilisateurs pour le lot nouvellement créé
            $lot->calculerDroitUtilisateurs();

            //Redirection de l'utilisateur vers la page de consultation
            //du lot nouvellement créé
            $this->redirect('lot/show?id_lot='.$lot->getIdLot());
        }
    }
  

    
    public function executeListEchantillon(sfWebRequest $request)
    {
        if ($request->isXmlHttpRequest())
        {
            $this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot')));
            
            // On vérifie que l'utilisateur a les droits de lecture sur le lot concerné
            $this->droitLecture();
            
            $sSearch = $request->getParameter("sSearch");
            $iSortCol_0 = $request->getParameter("iSortCol_0");
            $sSortDir_0 = $request->getParameter("sSortDir_0");
            $iDisplayStart = $request->getParameter("iDisplayStart");
            $iDisplayLength = $request->getParameter("iDisplayLength");
            $page = number_format($iDisplayStart / $iDisplayLength) + 1;
            
            $q = Doctrine_Core::getTable('echantillon')->getEchantillonLotDatatable($this->lot->getIdLot(), $sSearch, $iSortCol_0, $sSortDir_0);
            
            $this->pager = new sfDoctrinePager(
                'mesEchantillons',
                sfConfig::get(2)
            );
            $this->pager->setQuery($q);
            $this->pager->setMaxPerPage($iDisplayLength);
            $this->pager->setMaxRecordLimit($iDisplayLength);
            $this->pager->setPage($page);
            $this->pager->init();
            
            $pager = $this->pager;

            $this->getContext()->getConfiguration()->loadHelpers('Url'); 
            $aaData = array();
            $list = $pager->getResults();
            foreach ($list as $v)
            {
                $forme = "";
                if($v->getTypeForme())
                {
                    $forme = $v->getTypeForme()->getLibelle();
                }
                $lieu = "";
                if($v->getLieu()) $lieu = $v->getLieu()->getLibelle();
                $date = "";
                if($v->getDateCreation()) $date = $v->getDateTimeObject('date_creation')->format('d/m/Y');
                $consulter = '<a class="submit" href="'.url_for("echantillon/show?id_echantillon=".$v->getIdEchantillon()).'">Consulter</a>';
                $aaData[] = array(
                    "0" => $v->getIdEchantillon(),
                    "1" => $v->getNom(),
                    "2" => $date,
                    "3" => $v->getEtatEchantillon()->getLibelle(),
                    "4" => $lieu,
                    "5" => $forme,
                    "6" => $v->getNbTraitement(),
                    "7" => $v->getMesure()->count(),
                    "8" => $v->getCommentaire()->count(),
                    "9" => $consulter
                );
            }

            $output = array(
            "iTotalRecords" => count($pager),
            "iTotalDisplayRecords" => count($pager),
            "aaData" => $aaData,
            );

            return $this->renderText(json_encode($output));
        }
    }
   
    
    public function executeListTraitement(sfWebRequest $request)
    {
        if ($request->isXmlHttpRequest())
        {
            $this->lot = Doctrine_Core::getTable('lot')->find(array($request->getParameter('id_lot')));
            
            // On vérifie que l'utilisateur a les droits de lecture sur le lot concerné
            $this->droitLecture();
            
            $sSearch = $request->getParameter("sSearch");
            $iSortCol_0 = $request->getParameter("iSortCol_0");
            $sSortDir_0 = $request->getParameter("sSortDir_0");
            $iDisplayStart = $request->getParameter("iDisplayStart");
            $iDisplayLength = $request->getParameter("iDisplayLength");
            $page = number_format($iDisplayStart / $iDisplayLength) + 1;
              
            
            $q = Doctrine_Core::getTable('traitement')->getTraitementLotDatatable($this->lot->getIdLot(), $sSearch, $iSortCol_0, $sSortDir_0);
            
            
            $this->pager = new sfDoctrinePager(
                'traitementLot',
                sfConfig::get(2)
            );
            $this->pager->setQuery($q);
            $this->pager->setMaxPerPage($iDisplayLength);
            $this->pager->setMaxRecordLimit($iDisplayLength);
            $this->pager->setPage($page);
            $this->pager->init();
            
            $pager = $this->pager;

            $this->getContext()->getConfiguration()->loadHelpers('Url'); 
            $aaData = array();
            $list = $pager->getResults();
            foreach ($list as $v)
            {
                $lieu = "";
                if($v->getLieu()) $lieu = $v->getLieu()->getLibelle();
                $success = "";
                if($v->getOk() == 1) $success = "Oui";
                elseif($v->getOk() == 0) $success = "Non";
                //$consulter = "";
                $consulter = '<a class="submit" href="'.url_for("traitement/show?id_traitement=".$v->getIdTraitement()).'">Consulter</a>';
                $aaData[] = array(
                    "0" => $v->getOrdre(),
                    "1" => $v->getIdTraitement(),
                    "2" => $v->getTypeTraitement()->getLibelle(),
                    "3" => $v->getNumeroFicheMachine(),
                    "4" => $lieu,
                    "5" => $v->getDureeTraitementToString(),
                    "6" => $success,
                    "7" => $v->getCommentaire()->count(),
                    "8" => $consulter
                );
            }

            $output = array(
            "iTotalRecords" => count($pager),
            "iTotalDisplayRecords" => count($pager),
            "aaData" => $aaData,
            );

            return $this->renderText(json_encode($output));
        }
    }
    
    public function executeModifOrdre(sfWebRequest $request)
    {
        if ($request->isXmlHttpRequest())
        {
            $direction = $request->getParameter("direction");
            $fromPosition = $request->getParameter("fromPosition");
            $toPosition = $request->getParameter("toPosition");
            $tmpId = explode('_', $request->getParameter("id"));
            $idLot = $tmpId[0];
            $idTraitement = $tmpId[1];

            $this->lot = Doctrine_Core::getTable('lot')->find(array($idLot));
            if($this->lot != null)
            {
                // On vérifie que l'utilisateur a les droits d'écriture sur le lot concerné
                $this->droitEcriture();
                
                $reponse = $this->lot->modifOrdreTraitements($direction, $fromPosition, $toPosition, $idTraitement);
                return $this->renderText($reponse);
            }
            else
            {
                return $this->renderText("Lot introuvable"); 
            }
        }
    }
}
